Rebuild Jules UI with task management, chat, and analytics features#461
Rebuild Jules UI with task management, chat, and analytics features#461jmbish04 wants to merge 9 commits into
Conversation
…ettings New frontend pages and components for the Jules control plane: - Task management: create, list, detail, approval, feedback, and status views - Chat interface with message list and input - Agent insights with session analytics and velocity charts - Settings editor with category-based configuration - Design lab with Stitch project browser - Retrofit workflow UI - Data table components (column header, faceted filter, pagination, toolbar) - Sidebar store and Jules settings store - Global and repo-scoped route registration - Remove stale webhooks migrations (already applied to production) - Update Dockerfile sandbox SDK to v0.8.1 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…itHub, home Build out the 5 stub pages that Jules sessions didn't produce code for: - BacklogPage: hierarchical work-item grid with bulk actions - SkillsPage: skill card grid with create/import dialogs - MCPSettingsPage: MCP server cards with add/edit/test - GitHubPage: connected repos with session lists - JulesHomePage: dashboard with stats and quick actions Also adds supporting components: WorkItemGrid, WorkItemRow, BulkActionsBar, SkillCard, CreateSkillDialog, ImportSkillsDialog, MCPServerCard, AddMCPServerDialog, RepoSessionList, TaskDraftsDialog, and useTaskDrafts/useJulesMCPStore stores. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Code Review
This pull request overhauls the AI agent architecture and documentation by consolidating fragmented rule files into a structured archive and establishing a new master ruleset. It refactors AGENTS.md into a routing index and introduces proxy logic for Cloudflare bindings within the container environment. The review feedback identifies a bug in the regex used for dependency cleanup, broken links in the new routing table, and a need for more robust error handling in the worker proxy function to handle non-JSON responses.
| content = re.sub(r'import\s+.*?SandboxDeps.*?\n', '', content) | ||
| # Remove any export of SandboxDeps |
There was a problem hiding this comment.
The regular expression used to remove imports is too aggressive. It matches the entire line if SandboxDeps is present, which will inadvertently delete other imports on the same line (e.g., import { SandboxDeps, OtherType } from './types';). Additionally, it does not handle multiline imports correctly.
| async function proxyToWorker(subPath: string, body: unknown): Promise<{ status: number; data: unknown }> { | ||
| if (!WORKER_URL || !WORKER_API_KEY) { | ||
| return { status: 503, data: { error: "Worker proxy not configured (missing COLBY_WORKER_URL or COLBY_WORKER_API_KEY)" } }; | ||
| } | ||
| const res = await fetch(`${WORKER_URL}/api/sandbox/proxy/${subPath}`, { | ||
| method: "POST", | ||
| headers: { "Content-Type": "application/json", "X-Worker-Api-Key": WORKER_API_KEY }, | ||
| body: JSON.stringify(body), | ||
| }); | ||
| const data = await res.json(); | ||
| return { status: res.status, data }; | ||
| } |
There was a problem hiding this comment.
The proxyToWorker function lacks robust error handling. Specifically, res.json() is called without verifying the Content-Type of the response or checking if the request was successful (res.ok). If the worker returns a non-JSON error (e.g., a Cloudflare 5xx HTML page), this will throw an unhandled exception. Consider wrapping the fetch and parsing logic in a try-catch block and validating the response before parsing.
async function proxyToWorker(subPath: string, body: unknown): Promise<{ status: number; data: unknown }> {
if (!WORKER_URL || !WORKER_API_KEY) {
return { status: 503, data: { error: "Worker proxy not configured (missing COLBY_WORKER_URL or COLBY_WORKER_API_KEY)" } };
}
try {
const res = await fetch(WORKER_URL + "/api/sandbox/proxy/" + subPath, {
method: "POST",
headers: { "Content-Type": "application/json", "X-Worker-Api-Key": WORKER_API_KEY },
body: JSON.stringify(body),
});
const contentType = res.headers.get("content-type");
if (contentType && contentType.includes("application/json")) {
const data = await res.json();
return { status: res.status, data };
}
const text = await res.text();
return { status: res.status, data: { error: text } };
} catch (err: any) {
return { status: 500, data: { error: err.message } };
}
}Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
|
@copilot please fix all code comments left by Gemini code review bot |
Agent-Logs-Url: https://github.com/jmbish04/core-github-api/sessions/ceaf91cc-573c-40ca-bc57-09e9eda90179 Co-authored-by: jmbish04 <26469722+jmbish04@users.noreply.github.com>
Agent-Logs-Url: https://github.com/jmbish04/core-github-api/sessions/ceaf91cc-573c-40ca-bc57-09e9eda90179 Co-authored-by: jmbish04 <26469722+jmbish04@users.noreply.github.com>
Agent-Logs-Url: https://github.com/jmbish04/core-github-api/sessions/ceaf91cc-573c-40ca-bc57-09e9eda90179 Co-authored-by: jmbish04 <26469722+jmbish04@users.noreply.github.com>
Implemented all actionable Gemini review comments in commit b926854 (plus supporting fix commits b36e72b and 34a4eee). This includes safer SandboxDeps import/export cleanup and robust worker proxy response/error handling. No UI files were changed, so there is no UI screenshot for this update. |
…ettings
New frontend pages and components for the Jules control plane:
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com